package com.maxjay.component.metadata.core;

import com.maxjay.component.simplelist.core.QuerySchemeFatory;
import com.maxjay.component.simplelist.core.QuerySchemeFatoryImpl;
import com.maxjay.system.core.spring.BeanContext;

/**
 * 
 * 表示Entity上下文的一个抽象类，该类提供了获取Entity工厂等抽象方法。
 * 
 * <p>
 * 系统通常情况下只会存在一个上下文实例，本类提供了两个静态访法来设置和访问该实例。 外部代码可以调用 <code>setContext()</code>
 * 方法进行上下文实例的改变，以及调用 <code>getContext()</code> 方法获取上一次设置的上下文实例。
 * </p>
 * 
 */
public class EntityContext {
	
	private EntityFactory entityFactory;
	
	private FormatterFactory formatterFactory;
	
	private QuerySchemeFatory querySchemeFatory;
	
	public EntityContext(BeanContext beanContext) {
		this.entityFactory = new EntityFactoryImpl(beanContext);
		this.formatterFactory = new FormatterFactoryImpl(beanContext);
		this.querySchemeFatory = new QuerySchemeFatoryImpl(beanContext);
	}

	/**
	 * 获得字典表管理器
	 * 
	 * @return
	 */
//	public abstract DictionaryManager getDictionaryManager();

	/**
	 * 获得树管理器
	 * 
	 * @return
	 */
//	public abstract TreeManager getTreeManager();

	/**
	 * 获得Entity工厂
	 * 
	 * @return
	 */
	public EntityFactory getEntityFactory() {
		return entityFactory;
	}
	
	public FormatterFactory getFormatterFactory() {
		return formatterFactory;
	}
	
	public QuerySchemeFatory getQuerySchemeFatory() {
		return querySchemeFatory;
	}

	/**
	 * 重新加载上下文
	 * 
	 * @throws Exception
	 */
	public void reload() throws Exception {
		
	}

	/**
	 * 销毁上下文实例
	 */
	public void destroy() {
		entityFactory.destroy();
		querySchemeFatory.destroy();
	}
}
